/*
 * Copyright (c) 2021 DuckDuckGo
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.duckduckgo.appbuildconfig.api

import java.util.*

interface AppBuildConfig {
    val isTest: Boolean
    val isPerformanceTest: Boolean
    val isDebug: Boolean
    val applicationId: String
    val buildType: String
    val versionCode: Int
    val versionName: String
    val flavor: BuildFlavor
    val sdkInt: Int
    val manufacturer: String
    val model: String
    val deviceLocale: Locale
    val isDefaultVariantForced: Boolean
    val buildDateTimeMillis: Long
    val canSkipOnboarding: Boolean

    /**
     * You should call [variantName] in a background thread
     */
    val variantName: String?

    /**
     * @return `true` if the user re-installed the app, `false` otherwise
     */
    suspend fun isAppReinstall(): Boolean

    /**
     * Detects if this is a fresh installation of the app (first time install).
     *
     * @return true if this is a new installation (not an update), false otherwise
     */
    fun isNewInstall(): Boolean
}

enum class BuildFlavor {
    INTERNAL,
    FDROID,
    PLAY,
}

/**
 * Convenience extension function
 * @return `true` when the current build flavor is INTERNAL, `false` otherwise
 */
fun AppBuildConfig.isInternalBuild(): Boolean = flavor == BuildFlavor.INTERNAL
